package cn.iocoder.yudao.module.reading.dal.mysql.book;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.reading.controller.admin.page.vo.BookPagePageReqVO;
import cn.iocoder.yudao.module.reading.dal.dataobject.book.BookPageDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * 绘本页面 Mapper
 *
 * @author 芋道源码
 */
@Mapper
public interface BookPageMapper extends BaseMapperX<BookPageDO> {

    /**
     * 根据绘本ID查询页面列表
     *
     * @param bookId 绘本ID
     * @return 页面列表
     */
    default List<BookPageDO> selectByBookId(Long bookId) {
        return selectList(new LambdaQueryWrapperX<BookPageDO>()
                .eq(BookPageDO::getBookId, bookId)
                .eq(BookPageDO::getIsActive, true)
                .orderByAsc(BookPageDO::getPageNumber));
    }

    /**
     * 根据绘本ID和页码查询页面
     *
     * @param bookId     绘本ID
     * @param pageNumber 页码
     * @return 页面
     */
    default BookPageDO selectByBookIdAndPageNumber(Long bookId, Integer pageNumber) {
        return selectOne(new LambdaQueryWrapperX<BookPageDO>()
                .eq(BookPageDO::getBookId, bookId)
                .eq(BookPageDO::getPageNumber, pageNumber)
                .eq(BookPageDO::getIsActive, true));
    }

    /**
     * 根据绘本ID列表查询页面列表
     *
     * @param bookIds 绘本ID列表
     * @return 页面列表
     */
    default List<BookPageDO> selectByBookIds(List<Long> bookIds) {
        return selectList(new LambdaQueryWrapperX<BookPageDO>()
                .in(BookPageDO::getBookId, bookIds)
                .eq(BookPageDO::getIsActive, true)
                .orderByAsc(BookPageDO::getBookId)
                .orderByAsc(BookPageDO::getPageNumber));
    }

    /**
     * 分页查询绘本页面
     *
     * @param pageReqVO 分页查询条件
     * @return 绘本页面分页结果
     */
    default PageResult<BookPageDO> selectPage(BookPagePageReqVO pageReqVO) {
        return selectPage(pageReqVO, new LambdaQueryWrapperX<BookPageDO>()
                .eqIfPresent(BookPageDO::getBookId, pageReqVO.getBookId())
                .eqIfPresent(BookPageDO::getPageNumber, pageReqVO.getPageNumber())
                .likeIfPresent(BookPageDO::getTextContent, pageReqVO.getTextKeyword())
                .eq(BookPageDO::getIsActive, true)
                .orderByAsc(BookPageDO::getBookId)
                .orderByAsc(BookPageDO::getPageNumber));
    }

    /**
     * 获取最大ID
     *
     * @return 最大ID，如果表为空则返回null
     */
    @Select("SELECT MAX(id) FROM book_pages")
    Long selectMaxId();

}
